#ifndef _WT588F_API_H_
#define _WT588F_API_H_

#include "wt588f_board.h"

#if _VOICE_PLAY_TYPE_ == _VOICE_PLAY_SPEAKER_

/* 系统音量等级 0 - 15 */
// 最小音量
#define WT588F_MIN_VOLUME_LEVEL                           0
// 等大音量
#define WT588F_MAX_VOLUME_LEVEL                           15
// 默认音量
#define WT588F_DEFAULT_VOLUME_LEVEL                       7

/**
 * @brief 语音包
 *
 */
typedef enum Wt588fVOICECmdClass
{
  VOICE_ZERO,                        // 0
  VOICE_ONE,                         // 1
  VOICE_TWO,                         // 2
  VOICE_THREE,                       // 3
  VOICE_FOUR,                        // 4
  VOICE_FIVE,                        // 5
  VOICE_SIX,                         // 6
  VOICE_SEVEN,                       // 7
  VOICE_EIGHT,                       // 8
  VOICE_NINE,                        // 9
  VOICE_TONE_STATUP,                 // 开机铃声
  VOICE_ALARM,                       // 警报
  VOICE_TONE_DOORBELL,               // 门铃
  VOICE_TONE_KEY,                    // 按键声
  VOICE_FACE,                        // 人脸
  VOICE_QRCODE,                      // 二维码
  VOICE_SUCCEED,                     // 成功
  VOICE_FAIL,                        // 失败
  VOICE_TURN_ON,                     // 打开
  VOICE_TURN_OFF,                    // 关闭
  VOICE_SWITCH,                      // 切换
  VOICE_EXIT,                        // 退出
  VOICE_SETTING,                     // 设置
  VOICE_VERIFICATION,                // 验证
  VOICE_REGISTER,                    // 注册
  VOICE_MODE,                        // 模式
  VOICE_ATTENTION_PLEASE,            // 请注意
  VOICE_PLEASE_TRY_AGAIN,            // 请重试
  VOICE_PLEASE_WAIT,                 // 请稍后
  VOICE_DEVICE_DISCOVER,             // 设备发现
  VOICE_EQUIIPMENT_BUSY,             // 设备繁忙
  VOICE_FACTORY_RESET,               // 恢复出厂
  VOICE_INSUFFICIENT_PRIVILEGES,     // 权限不足
  VOICE_INVALID_INPUTS,              // 无效输入
  VOICE_LOCK_UNLOCKED,               // 锁已开
  VOICE_LOCK_CLOSED,                 // 锁已关闭
  VOICE_NORMALLY_OPEN_MODE,          // 常开模式
  VOICE_FILE_RECEIVING,              // 文件接收中
  VOICE_SYSTEM_LOCKED,               // 系统已锁定
  VOICE_BATTERY_LOW,                 // 电量不足，请更换电池
  VOICE_PLEASE_SWIPE_CARD,           // 请刷卡
  VOICE_ENTER_PASSWORD,              // 请输入 6 位数字
  VOICE_ENTER_IT_AGAIN,              // 请再输入一遍
  VOICE_INCONSISTENT_COMPARISON,     // 密码比对不一致
  VOICE_ENABLE_FACE_ENTRY_1,         // 保持面部无遮挡
  VOICE_ENABLE_FACE_ENTRY_2,         // 秒后开始录入
  VOICE_LOOK_MIDDLE,                 // 请正视摄像头
  VOICE_LOOK_UP,                     // 向上抬头
  VOICE_LOOK_DOWN,                   // 请微微低头
  VOICE_LOOK_LEFT,                   // 请向左微微转头
  VOICE_LOOK_RIGHT,                  // 请向右微微转头
  VOICE_PRESS_YOUR_FINGER,           // 请按手指
  VOICE_DUPLICATE_FINGERPRINT_ENTRY, // 请将手指拿开 再按一遍
  VOICE_SCANF_QRCODE,                // 请扫码
  VOICE_RSSI_VALUE,                  // 当前网络 RSSI 质量
  VOICE_KEYWORD_RENEW_LEASE_0,       // 授权剩余天数不足
  VOICE_KEYWORD_RENEW_LEASE_1,       // 天，请及时续约
  VOICE_ADD_ADMINISTRATOR,           // 设备处于初始化状态，请添加管理员
  VOICE_EXIT_KEYVALUE,               // 退出请按 * 号键
  // 250226 新增
  VOICE_ENTER_KEYVALUE,              // 确认请按 # 号键
  VOICE_PLEASE_VERIFY,               // 请验证
  VOICE_ADMINISTRATOR,               // 管理员
  VOICE_USER,                        // 用户
  VOICE_CARD,                        // 卡片
  VOICE_PASSWORD,                    // 密码
  VOICE_FINGERPRINT,                 // 指纹
  VOICE_PERMISSION,                  // 权限
  VOICE_EXISTING,                    // 已存在
  VOICE_LOCKED,                      // 已反锁
  VOICE_REPLACED,                    // 已顶替
  VOICE_EXPIRED,                     // 不在有效时间段
  VOICE_ABNORMAL,                    // 异常故障
  VOICE_REMAINING,                   // 剩余电量
  VOICE_PERCENTAGE,                  // 百分之
  VOICE_TEN,                         // 10
  VOICE_TWENTY,                      // 20
  VOICE_THIRTY,                      // 30
  VOICE_FORTY,                       // 40
  VOICE_FIFTY,                       // 50
  VOICE_SIXTY,                       // 60
  VOICE_SEVENTY,                     // 70
  VOICE_EIGHTY,                      // 80
  VOICE_NINETY,                      // 90
  VOICE_HUNDRED,                     // 100
} Wt588fVoiceCommand_t;

/**
 * @brief 控制码
 *
 */
typedef enum
{
  WT588F_VOLUME_LEVEL  = 0xE0, // 音量等级，调节范围0-15
  WT588F_LOOP_PLAYBACK = 0xF2, // 循环构建
  WT588F_LINK_PLAY     = 0xF3, // 连码构建
  WT588F_INSERT_MUTE   = 0xF8, // 插入静音
  WT588F_STOP_PLAYING  = 0xFE, // 停止构建当前音效
} Wt588fCommandControl_t;

/**
 * @brief 构建设置音量等级报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Level    - 音量等级
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildSetVolumeLevelMessage(uint8_t *pDataOut, uint8_t *pSizeOut, uint8_t Level);

/**
 * @brief 构建开机铃声报文
 *
 * @param pDataOut  - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildStartupToneMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建按键铃声报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildKeyMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建警报铃声报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildAlarmMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建门铃铃声报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildDoorbellMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建切换人脸鉴权模式报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildSwitchFaceAuthenticationModeMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建切换二维码鉴权模式报文
 *
 * @param pDataOut  - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildSwitchQrcodeAuthenticationModeMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建设置状态音效报文
 *
 * @param Status - 状态(true:成功 false:失败)
 * @return bool  - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildSettingStatusMessage(uint8_t *pDataOut, uint8_t *pSizeOut, bool Status);

/**
 * @brief 构建验证状态报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Status   - 状态(true:成功 false:失败)
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildVerificationStateMessage(uint8_t *pDataOut, uint8_t *pSizeOut, bool Status);

/**
 * @brief 构建构建发现状态报文
 *
 * @param Status - 发现状态(true:开启 false:关闭)
 * @return bool  - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildDeviceDiscoverStatusMessage(uint8_t *pDataOut, uint8_t *pSizeOut, bool Status);

/**
 * @brief 构建恢复出厂构建状态报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Status   - 恢复状态(true:成功 false:失败)
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildFactoryResetStatusMessage(uint8_t *pDataOut, uint8_t *pSizeOut, bool Status);

/**
 * @brief 构建用户注册状态报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Status - 注册状态(true:成功 false:失败)
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildUserRegistrationStatusMessage(uint8_t *pDataOut, uint8_t *pSizeOut, bool Status);

/**
 * @brief 构建退出注册模式报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildExitLocalRegisterMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建退出验证模式报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildExitVerificationModeMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建鉴权失败音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildPermissionDeniedMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建设备繁忙音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildEquipmentBusyStatusMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建当前锁状态音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Status   - 当前门锁状态
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildCurrentLockStatusMessage(uint8_t *pDataOut, uint8_t *pSizeOut, bool LockStatus);

/**
 * @brief 构建网络质量报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Rssi     - 信号增益
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildNetworkQualityMessage(uint8_t *pDataOut, uint8_t *pSizeOut, uint8_t Rssi);

/**
 * @brief 构建常开模式状态音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Mode     - 开启状态(true:开启 false:关闭)
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildConfigurationNormallyOpenModeMessage(uint8_t *pDataOut, uint8_t *pSizeOut, bool Mode);

/**
 * @brief 构建告知设备处于下发文件中音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildNotifyTheDeviceThatTheFileIsBeingDeliveredMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建系统已锁定音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildSystemLockMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建低电量音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildLowBatteryMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建录取新卡片时的音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildAddNewCardMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建通过键盘录取密钥时的音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildEnterKeyViaTheKeyboardMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建无效按键音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildInvalidKeyValueMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建密码比对不一致音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildPasswordComparisonIsInconsistentMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建验证输入的数值是否一致时的音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildVerifyThatTheEnteredValuesAreConsistentMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建启动人脸录入音效报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Second   - 秒
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildStartRegisterFaceEigenvaluesMessage(uint8_t *pDataOut, uint8_t *pSizeOut, uint8_t Second);

/**
 * @brief 请正式摄像头报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildLookMiddleMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建录取人脸音效-抬头报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildLookUpMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建录取人脸音效-低头报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildLookDownMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建录取人脸音效-向左看报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildLookLeftMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建录取人脸音效-向右看报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildLookRightMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建开始录取指纹音效内容报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildStartPrintingMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建重新录取指纹音效内容报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildReadmissionPrintingMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建请扫码音效内容报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildPleaseScanQrCodeMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建提示设备处于初始化状态报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildIndicatesDeviceInTheInitializationStateMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建到期提示语音报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @param Days     - 到期天数
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildExpirationReminderMessage(uint8_t *pDataOut, uint8_t *pSizeOut, uint8_t Days);

/**
 * @brief 构建成本授权成功语音报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildDeviceAuthorizationSuccessfulMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建连接测试语音报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildConnectTestMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建自检失败提示语音报文
 *
 * @param pDataOut  - 输出数据
 * @param pSizeOut  - 输出数据长度
 * @param ErrorCode - 错误码
 * @return bool     - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildSelfTestErrorMessage(uint8_t *pDataOut, uint8_t *pSizeOut, uint8_t ErrorCode);

/**
 * @brief 构建授权码已过期语音报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildLicenseExpiredMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建用户已存在语音报文
 * 
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildUserAlreadyExistsMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建验证管理员密码语音报文
 * 
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildVerifyAdminPasswordMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建退出注册模式语音报文
 * 
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildExitRegisterMethodMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建验证用户信息语音报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildPleaseVerifyUserPermissionsMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建提示设备反锁语音报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildDeviceLockedMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建提示卡片已顶替语音报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildCardReplacedMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建提示卡片已过期语音报文
 *
 * @param pDataOut - 输出数据
 * @param pSizeOut - 输出数据长度
 * @return bool    - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildCardExpiredMessage(uint8_t *pDataOut, uint8_t *pSizeOut);

/**
 * @brief 构建提示注册用户数量语音报文
 *
 * @param pDataOut     - 输出数据
 * @param pSizeOut     - 输出数据长度
 * @param SuccessCount - 注册用户数量
 * @param FailureCount - 注册失败用户数量
 * @return bool        - 构建状态(true:成功;!true:失败) 
 */
extern bool Wt588fBuildRegisterUserCountMessage(uint8_t *pDataOut, uint8_t *pSizeOut, uint8_t SuccessCount, uint8_t FailureCount);

/**
 * @brief 构建提示当前剩余电量百分比语音报文
 *
 * @param pDataOut          - 输出数据
 * @param pSizeOut          - 输出数据长度
 * @param BatteryPercentage - 剩余电量百分比
 * @return bool             - 构建状态(true:成功;!true:失败)
 */
extern bool Wt588fBuildRemainingBatteryPercentageMessage(uint8_t *pDataOut, uint8_t *pSizeOut, uint8_t BatteryPercentage);

#endif
#endif
